/*******************************************************************************
 * Package: com.song.boot.springstudy.lambda
 * Type:    Main01
 * Date:    2025-04-04 23:04
 *
 * Copyright (c) 2025 LTD All Rights Reserved.
 *
 * You may not use this file except in compliance with the License.
 *******************************************************************************/
package com.song.boot.springstudy.lambda;

import io.swagger.models.auth.In;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.function.*;

/**
 * 功能描述：
 *  有返回的时候 要有大括号
 * @author Songxianyang
 * @date 2025-04-04 23:04
 */
class Cat{
    public String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public static String getName2() {
        return "hhhhhh";
    }
}
public class Main01 {

    public static void main(String[] args) {
        // 没有返回值内部消化
        Consumer<String> consumer = s -> System.out.println("消费性接口！" + s);
        consumer.accept("给一个值");
        // 供给型接口  可以获取类中的方法
        Supplier<String> supplier=Cat::getName2;
        System.out.println(supplier.get());

        // 接收一个参数，返回处理后的结果
        Function<Integer, String> function = int1 -> int1.toString();
        // 有返回值
        System.out.println(function.apply(99));
        //断言型接口 校验
        Predicate<List> predicate= list -> {
            if (list.size() > 0) {
                return true;
            } else {
                return false;
            }
        };

        System.out.println(predicate.test(Arrays.asList("args")));
        System.out.println(predicate.test(new ArrayList()));
        // 对象比较
        Comparator<Integer> comparator= (x,y)->{
            if (x > y) {
                return 1;
            } else {
                return 0;
            }
        };

        System.out.println(comparator.compare(99, 88));
        // 接收两个参数，返回结果
        BiFunction<Integer,String,String> biFunction= (x,y)-> x.toString()+y;

        System.out.println(biFunction.apply(1, "接收两个参数，返回结果"));
        // 接收两个参数，无返回
        BiConsumer<String, String> biConsumer = (x, y) -> System.out.println(x + y);
        biConsumer.accept("接收两个参数","，无返回");

        UnaryOperator<String> unaryOperator = s -> s + "我的接口";
        System.out.println(unaryOperator.apply("继承自 Function，输入输出类型相同"));


        BinaryOperator<String> binaryOperator= (x,y)->x + y;
        System.out.println(binaryOperator.apply("接收两个同类型参数", "，返回同类型结果"));
    }
}
